Skip to content

test(prose): discovery, walked to the point where work first exists - #568

Merged
leeovery merged 1 commit into
mainfrom
test/prose-discovery-work-type-commit
Jul 27, 2026
Merged

test(prose): discovery, walked to the point where work first exists#568
leeovery merged 1 commit into
mainfrom
test/prose-discovery-work-type-commit

Conversation

@leeovery

@leeovery leeovery commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Summary

Discovery is the phase every work type begins at, and it had no coverage at all. This walks it from workflow-start on a genuinely empty project — no work units, no inbox, not even a project manifest, since none exists until the first work unit is created — through the opener, the shape-and-confirm gate and name resolution, stopping the moment the work unit is on disk.

That stop is the durability boundary, not an arbitrary point. Everything before the work-type commit is ephemeral however long the shaping ran; everything after it persists. The case asserts exactly that: nothing on disk until one engine transaction creates the work unit, installs the cache-staged session log, and commits.

Three firsts:

  • First case that creates a work unit rather than reading one someone else built.
  • First live user of world: "claims" — the manifest description and the session log's prose are the model's to write, so the world is judged against stated claims rather than byte-compared.
  • Only the second case where engine_before_write is not vacuous, since the walk stages the session log under .workflows itself.

The deterministic spine is ordering: manifest exists must run before workunit create — a collision check that runs after the thing it checks for is no check at all. Plus calls_exclude on the epic machinery (no map, no topics, no session close), since single-phase work must not touch any of it.

The name is supplied by the scripted user rather than accepting the suggestion, which fixes every path in the expected world instead of leaving it to what the model would derive from the description.

Test plan

Passed on first run, on claude-sonnet-5:

PATH: 5/5 steps passed
WORLD: PASS
PASS  engine_before_write — every workflow write followed an engine call
PASS  calls_include  — manifest exists search-filters, workunit create search-filters feature
PASS  calls_exclude  — ran none of: discovery-map, discovery-session close, topic start
PASS  calls_in_order — manifest exists search-filters → workunit create search-filters feature
MARKERS: none

Deterministic gate 76/76; snapshot rebuilds byte-identical.

🤖 Generated with Claude Code

Stack

  1. docs(design): prose-tests programme design log #544
  2. feat(prose-tests): the framework — cases, worlds, runner, skill #545
  3. test(prose): feature happy-path corpus — five worlds, seven cases #546
  4. test(prose): bugfix corpus — the investigation-centric surfaces #548
  5. test: retry recursive teardown removals — kill a class of phantom failures #549
  6. fix(entry-skills): close the handoff fences — six files render their arms wrong #550
  7. docs: a contributing page for working on the system #551
  8. fix(entry-skills): every handoff arm says to invoke the skill #552
  9. fix(implementation): environment setup belongs to the setup reference alone #553
  10. fix(prose-tests): the asserter is told which substitutions were armed #554
  11. feat(prose-tests): the mid-flow substitution, and a world only prose can describe #555
  12. test(prose): claims assert consequences, not what was displayed #556
  13. feat(prose-tests): record everything the agents do, results included #557
  14. fix(discussion-entry): the handoff reports the source it actually had #558
  15. fix(prose-tests): the stop hook records, and names the model that walked #559
  16. fix(prose-tests): command output was never actually recorded #560
  17. feat(prose-tests): judge the walk as told, not the summary returned #561
  18. feat(prose-tests): decide in code what an agent should not be deciding #562
  19. test(prose): a case starts where a session starts #563
  20. feat(prose-tests): walk on Sonnet, judge on Opus, escalate a failure #564
  21. test(prose): give the eight read-only cases something that can fail #565
  22. test(prose): only walks that can be observed, and checks that survive the trip #566
  23. fix(prose-tests): the verdict names only the model the record names #567
  24. test(prose): discovery, walked to the point where work first exists #568 👈 current
  25. fix(prose-tests): the asserter judges which of prose or walker was at fault #569
  26. docs(conventions): a step whose reference routes every exit still signposts #570
  27. test(prose): discovery's epic arm, to the same durability boundary #571
  28. fix(prose-tests): keep the walk's closing turn, and name the one live difference #572
  29. fix(prose-tests): prescribe the cross-check, drop a check that cannot fire, lint the scope #573
  30. test(prose): declare the prose each case actually walks #574
  31. fix(investigation): the symptom interview never ran for work shaped in discovery #575
  32. feat(prose-tests): conduct — playing a person where a script cannot reach #576
  33. fix(prose-tests): what a write put in a file is evidence, not incident #577
  34. fix(investigation): the interview starts from the carrier, not over it #578
  35. test(prose): quick-fix scoping, the whole definition stage in one walk #579
  36. fix(prose-tests): the world log is the walker's record #580
  37. fix(prose-tests): a confirmed failure reports both runs' checks #581
  38. fix(prose-tests): each prescribed command runs as written #582
  39. fix(scoping): context gathering reads the whole carrier, asks only the gaps #583

This was referenced Jul 26, 2026
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 7542d11 to 7305e24 Compare July 27, 2026 14:51
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from 02a55bc to f0ec7c5 Compare July 27, 2026 15:42
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 7305e24 to b65945a Compare July 27, 2026 15:42
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from f0ec7c5 to ee0c976 Compare July 27, 2026 15:44
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from b65945a to a25db8a Compare July 27, 2026 15:44
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from ee0c976 to 1584692 Compare July 27, 2026 15:46
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from a25db8a to 693f6af Compare July 27, 2026 15:46
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from 1584692 to 4695ffa Compare July 27, 2026 15:47
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 693f6af to 9b63ea9 Compare July 27, 2026 15:47
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from 4695ffa to cfb4c75 Compare July 27, 2026 15:49
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 9b63ea9 to e85e246 Compare July 27, 2026 15:49
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from cfb4c75 to d82bb34 Compare July 27, 2026 15:50
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from e85e246 to 37bec05 Compare July 27, 2026 15:50
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from d82bb34 to b5cef3d Compare July 27, 2026 15:52
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 37bec05 to 5406c97 Compare July 27, 2026 15:52
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from b5cef3d to 7b9d9c3 Compare July 27, 2026 15:53
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 5406c97 to 59188ff Compare July 27, 2026 15:53
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from 7b9d9c3 to ca28506 Compare July 27, 2026 15:54
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 59188ff to a6c7436 Compare July 27, 2026 15:54
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from ca28506 to 3b9b0b0 Compare July 27, 2026 15:55
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from a6c7436 to 3585c69 Compare July 27, 2026 15:55
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from 3b9b0b0 to 8378abd Compare July 27, 2026 15:57
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 3585c69 to 39ba335 Compare July 27, 2026 15:57
@leeovery
leeovery force-pushed the fix/prose-verdict-states-only-what-is-recorded branch from 8378abd to 1cea24e Compare July 27, 2026 15:58
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 39ba335 to 1166bc8 Compare July 27, 2026 15:58
@leeovery
leeovery changed the base branch from fix/prose-verdict-states-only-what-is-recorded to main July 27, 2026 15:59
Discovery is the phase every work type begins at, and it had no coverage
at all. This walks it from workflow-start on an empty project — no work
units, no inbox, not even a project manifest, since none exists until the
first work unit is created — through the opener, the shape-and-confirm
gate and name resolution, stopping the moment the work unit is on disk.

That stop is the durability boundary rather than an arbitrary point.
Everything before the work-type commit is ephemeral however long the
shaping ran; everything after it persists. The case asserts exactly that:
nothing is on disk until one engine transaction creates the work unit,
installs the session log staged in the cache, and commits.

Three firsts. It is the first case that creates a work unit instead of
reading one someone else built. It is the first live user of world
`claims` — the manifest description and the session log's prose are the
model's to write, so the world is judged against stated claims rather
than byte-compared. And it is only the second case where
engine_before_write is not vacuous, since the walk stages the session log
under .workflows itself.

The deterministic spine is the ordering: `manifest exists` must run
before `workunit create`, because a collision check after the thing it
checks for is no check at all. Alongside it, calls_exclude on the epic
machinery — no map, no topics, no session close — since single-phase work
must not touch any of it.

The name is supplied by the scripted user rather than accepting the
suggestion, which keeps every path in the expected world fixed instead of
depending on what the model would have derived from the description.

Passed first run: 5/5 path, all four checks, world PASS, no markers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@leeovery
leeovery force-pushed the test/prose-discovery-work-type-commit branch from 1166bc8 to e40f8a2 Compare July 27, 2026 15:59
@leeovery
leeovery merged commit 9e50a97 into main Jul 27, 2026
@leeovery
leeovery deleted the test/prose-discovery-work-type-commit branch July 27, 2026 17:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant